/**
 * 日期时间格式化函数
 * @param {string|Date} input - 支持ISO字符串或Date对象
 * @param {Object} [options] - 格式化选项
 * @param {boolean} [options.relative=true] - 是否使用相对时间格式
 * @param {string} [options.format='yyyy-MM-dd HH:mm'] - 自定义格式字符串
 * @returns {string} 格式化后的时间字符串
 * @example
 * formatDateTime('2021-06-24T16:29:54.000Z'); // 2年前
 * formatDateTime('2021-06-24T16:29:54.000Z', { relative: false }); // 2021-06-24 16:29
 * formatDateTime('2021-06-24T16:29:54.000Z', { format: 'yyyy年MM月dd日 HH时mm分' }); // 2021年06月24日 16时29分
 */
function formatDateTime(input, options = {}) {
    const { relative = true, format = 'yyyy-MM-dd HH:mm' } = options;
    
    try {
      const date = input instanceof Date ? input : new Date(input);
      if (isNaN(date)) return 'Invalid Date';
  
      // 相对时间处理
      if (relative) {
        const now = new Date();
        const diff = now - date;
        const seconds = Math.floor(diff / 1000);
        
        if (seconds < 60) return '刚刚';
        if (seconds < 3600) return `${Math.floor(seconds / 60)}分钟前`;
        if (seconds < 86400) return `${Math.floor(seconds / 3600)}小时前`;
        
        // 超过1天但日期相同
        if (
          date.getDate() === now.getDate() &&
          date.getMonth() === now.getMonth() &&
          date.getFullYear() === now.getFullYear()
        ) {
          return '今天 ' + formatDate(date, 'HH:mm');
        }
      }
  
      // 自定义格式处理
      return formatDate(date, format);
    } catch (e) {
      return 'N/A';
    }
  }
  
  // 辅助格式化函数
  function formatDate(date, format) {
    const pad = n => n.toString().padStart(2, '0');
    
    return format
      .replace(/yyyy/g, date.getFullYear())
      .replace(/MM/g, pad(date.getMonth() + 1))
      .replace(/dd/g, pad(date.getDate()))
      .replace(/HH/g, pad(date.getHours()))
      .replace(/mm/g, pad(date.getMinutes()))
      .replace(/ss/g, pad(date.getSeconds()));
  }

  export default formatDateTime;